<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Bomberman:  Fichier source de /home/ph3w/Bureau/lif7-bomberman/map.cpp</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Généré par Doxygen 1.7.1 -->
<script type="text/javascript">
function hasClass(ele,cls) {
  return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
  if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) {
  if (hasClass(ele,cls)) {
    var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
    ele.className=ele.className.replace(reg,' ');
  }
}

function toggleVisibility(linkObj) {
 var base = linkObj.getAttribute('id');
 var summary = document.getElementById(base + '-summary');
 var content = document.getElementById(base + '-content');
 var trigger = document.getElementById(base + '-trigger');
 if ( hasClass(linkObj,'closed') ) {
   summary.style.display = 'none';
   content.style.display = 'block';
   trigger.src = 'open.png';
   removeClass(linkObj,'closed');
   addClass(linkObj,'opened');
 } else if ( hasClass(linkObj,'opened') ) {
   summary.style.display = 'block';
   content.style.display = 'none';
   trigger.src = 'closed.png';
   removeClass(linkObj,'opened');
   addClass(linkObj,'closed');
 }
 return false;
}
</script>
<div class="header">
  <div class="headertitle">
<h1>/home/ph3w/Bureau/lif7-bomberman/map.cpp</h1>  </div>
</div>
<div class="contents">
<a href="map_8cpp.html">Aller à la documentation de ce fichier.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#include &quot;<a class="code" href="map_8h.html">map.h</a>&quot;</span>
<a name="l00002"></a>00002 <span class="preprocessor">#include &quot;<a class="code" href="debug_8h.html">debug.h</a>&quot;</span>
<a name="l00003"></a>00003 
<a name="l00004"></a><a class="code" href="map_8cpp.html#ad453f9f71ce1f9153fb748d6bb25e454">00004</a> <span class="keyword">typedef</span> <a class="code" href="map_8cpp.html#ad453f9f71ce1f9153fb748d6bb25e454">std::string</a> string;
<a name="l00005"></a>00005 
<a name="l00006"></a>00006 
<a name="l00007"></a>00007 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00008"></a>00008 <span class="comment">* @fn map::map()</span>
<a name="l00009"></a>00009 <span class="comment">* @brief Constructeur :: Initialise juste les variables. NE Créer PAS de map !</span>
<a name="l00010"></a>00010 <span class="comment">*</span>
<a name="l00011"></a>00011 <span class="comment">* Taille de la map = 0&lt;br /&gt;</span>
<a name="l00012"></a>00012 <span class="comment">* Pas de points de départ&lt;br /&gt;</span>
<a name="l00013"></a>00013 <span class="comment">*/</span>
<a name="l00014"></a><a class="code" href="classmap.html#abedfe6722ad83929739afd899c88fea4">00014</a> <a class="code" href="classmap.html#abedfe6722ad83929739afd899c88fea4" title="Constructeur :: Initialise juste les variables. NE Créer PAS de map !">map::map</a>()
<a name="l00015"></a>00015 {
<a name="l00016"></a>00016     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> = 0;
<a name="l00017"></a>00017     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> = 0;
<a name="l00018"></a>00018     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> = 0;
<a name="l00019"></a>00019     <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> = 0;
<a name="l00020"></a>00020     <a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a> = 0;
<a name="l00021"></a>00021 }
<a name="l00022"></a>00022 
<a name="l00023"></a>00023 
<a name="l00024"></a>00024 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00025"></a>00025 <span class="comment">* @fn map::map( unsigned int tailleX, unsigned int tailleY )</span>
<a name="l00026"></a>00026 <span class="comment">* @brief Constructeur :: Créer une map vide !</span>
<a name="l00027"></a>00027 <span class="comment">*/</span>
<a name="l00028"></a><a class="code" href="classmap.html#af136234b2c37dec366f2ee328d3c8732">00028</a> <a class="code" href="classmap.html#abedfe6722ad83929739afd899c88fea4" title="Constructeur :: Initialise juste les variables. NE Créer PAS de map !">map::map</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tailleX, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tailleY )
<a name="l00029"></a>00029 {
<a name="l00030"></a>00030     <span class="keywordflow">if</span>( tailleX != tailleY )
<a name="l00031"></a>00031         stdErrorE(<span class="stringliteral">&quot;Erreur ! La map doit être carrée ! %u != %u&quot;</span>, tailleX, tailleY);
<a name="l00032"></a>00032 
<a name="l00033"></a>00033     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> = tailleX;
<a name="l00034"></a>00034     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> = tailleY;
<a name="l00035"></a>00035     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> = <span class="keyword">new</span> <a class="code" href="structmap_1_1s___case.html">s_Case</a>[ tailleX * tailleY ];
<a name="l00036"></a>00036 
<a name="l00037"></a>00037     <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;tailleX*tailleY; i++ )
<a name="l00038"></a>00038     {
<a name="l00039"></a>00039         <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[i].<a class="code" href="structmap_1_1s___case.html#a86e865c530706b05742fa388c860652c" title="type d&amp;#39;element.">element</a> = map::vide;
<a name="l00040"></a>00040         <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[i].<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> = 0;
<a name="l00041"></a>00041     }
<a name="l00042"></a>00042 
<a name="l00043"></a>00043     <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> = 0;
<a name="l00044"></a>00044     <a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a> = 0;
<a name="l00045"></a>00045 }
<a name="l00046"></a>00046 
<a name="l00047"></a>00047 
<a name="l00048"></a>00048 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00049"></a>00049 <span class="comment">* @fn map::~map()</span>
<a name="l00050"></a>00050 <span class="comment">* @brief Désinitialise la class map</span>
<a name="l00051"></a>00051 <span class="comment">*</span>
<a name="l00052"></a>00052 <span class="comment">* - Supprime la map chargé</span>
<a name="l00053"></a>00053 <span class="comment">* - Supprime toutes les Info Joueurs (meta données)</span>
<a name="l00054"></a>00054 <span class="comment">* - Supprime les points de départ</span>
<a name="l00055"></a>00055 <span class="comment">* - Met toutes les variables à 0</span>
<a name="l00056"></a>00056 <span class="comment">*/</span>
<a name="l00057"></a><a class="code" href="classmap.html#a0cc22df7b44f7835fa10ed241848b041">00057</a> <a class="code" href="classmap.html#a0cc22df7b44f7835fa10ed241848b041" title="Désinitialise la class map.">map::~map</a>()
<a name="l00058"></a>00058 {
<a name="l00059"></a>00059     <span class="comment">// Suppression de la map si elle existe</span>
<a name="l00060"></a>00060     <span class="keywordflow">if</span>( <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> ){
<a name="l00061"></a>00061         <span class="comment">// Suppression des meta données</span>
<a name="l00062"></a>00062         <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>*<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>; i++ )
<a name="l00063"></a>00063         {
<a name="l00064"></a>00064             <span class="keywordflow">if</span>( <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[i].joueur )
<a name="l00065"></a>00065                 <span class="keyword">delete</span> <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[i].<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a>;
<a name="l00066"></a>00066         }
<a name="l00067"></a>00067         <span class="keyword">delete</span>[] <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>;
<a name="l00068"></a>00068     }
<a name="l00069"></a>00069 
<a name="l00070"></a>00070     <span class="comment">// Suppression des points de départ s&#39;ils existent</span>
<a name="l00071"></a>00071     <span class="keywordflow">if</span>( <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> )
<a name="l00072"></a>00072         <span class="keyword">delete</span>[] <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>;
<a name="l00073"></a>00073 
<a name="l00074"></a>00074     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> = 0;
<a name="l00075"></a>00075     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> = 0;
<a name="l00076"></a>00076     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> = 0;
<a name="l00077"></a>00077     <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> = 0;
<a name="l00078"></a>00078     <a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a> = 0;
<a name="l00079"></a>00079 }
<a name="l00080"></a>00080 
<a name="l00081"></a>00081 
<a name="l00082"></a>00082 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00083"></a>00083 <span class="comment">* @fn void map::setBlock( unsigned int X, unsigned int Y, map::t_type what )</span>
<a name="l00084"></a>00084 <span class="comment">* @brief Modifie le block qui est à la position X, Y</span>
<a name="l00085"></a>00085 <span class="comment">*</span>
<a name="l00086"></a>00086 <span class="comment">* Ne modifie en aucun cas les Info joueurs ( meta données )&lt;br /&gt;</span>
<a name="l00087"></a>00087 <span class="comment">* &lt;b&gt;/!\\ATTENTION EXCEPTION: si what = vide =&gt; nétoyage de toutes les meta données /!\&lt;/b&gt;</span>
<a name="l00088"></a>00088 <span class="comment">*/</span>
<a name="l00089"></a><a class="code" href="classmap.html#a9daefd4b8e29eba7b98b734ce4530fea">00089</a> <span class="keywordtype">void</span> <a class="code" href="classmap.html#a9daefd4b8e29eba7b98b734ce4530fea" title="Modifie le block qui est à la position X, Y.">map::setBlock</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> X, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Y, <a class="code" href="classmap.html#ae2a076bf152add89e510bca3428f469b" title="Les types de d&amp;#39;objet sur la map.">map::t_type</a> what )
<a name="l00090"></a>00090 {
<a name="l00091"></a>00091     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> || X &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || Y &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00092"></a>00092         stdErrorE(<span class="stringliteral">&quot;Impossible d&#39;accèder au block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u, what=%d&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y, what);
<a name="l00093"></a>00093 
<a name="l00094"></a>00094     c_block[X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y].element = what;
<a name="l00095"></a>00095     <a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.push_back( <a class="code" href="coordonnees_8h.html#a6672966a8002c5f5e0a711f7029b0e7d" title="Permet de créer facillement une stucture s_Coordonnees initialisée.">coordonneeConvert</a>(X,Y) );
<a name="l00096"></a>00096 
<a name="l00097"></a>00097     <span class="comment">// Nétoyage des méta données si le block est vide</span>
<a name="l00098"></a>00098     <span class="keywordflow">if</span>( what == <a class="code" href="classmap.html#ae2a076bf152add89e510bca3428f469ba508b0ad2c59b8c654beb73d2239c8e74">vide</a> &amp;&amp; c_block[X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y].joueur )
<a name="l00099"></a>00099         c_block[X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y].joueur-&gt;clear();
<a name="l00100"></a>00100 }
<a name="l00101"></a>00101 
<a name="l00102"></a>00102 
<a name="l00103"></a>00103 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00104"></a>00104 <span class="comment">* @fn void map::ajouterInfoJoueur( unsigned int X, unsigned int Y, unsigned char id_Joueur, bool premierePosition )</span>
<a name="l00105"></a>00105 <span class="comment">* @brief Ajoute des meta donnée ( ou info joueurs ) dans le block (X, Y)</span>
<a name="l00106"></a>00106 <span class="comment">* @param[in] X Coordonnée</span>
<a name="l00107"></a>00107 <span class="comment">* @param[in] Y Coordonnée</span>
<a name="l00108"></a>00108 <span class="comment">* @param[in] id_Joueur L&#39;id du joueur a ajouter au block (meta-info)</span>
<a name="l00109"></a>00109 <span class="comment">* @param[in] premierePosition Placer l&#39;id du joueur en 1ère position ?</span>
<a name="l00110"></a>00110 <span class="comment">*</span>
<a name="l00111"></a>00111 <span class="comment">* NOTE: Pour certain map::type comme bombe_poser, le 1er element représente l&#39;id du joueur qui a posé l&#39;objet</span>
<a name="l00112"></a>00112 <span class="comment">*/</span>
<a name="l00113"></a><a class="code" href="classmap.html#ac7e126e8c0555f9f2e9c86cc81865b9f">00113</a> <span class="keywordtype">void</span> <a class="code" href="classmap.html#ac7e126e8c0555f9f2e9c86cc81865b9f" title="Ajoute des meta donnée ( ou info joueurs ) dans le block (X, Y).">map::ajouterInfoJoueur</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> X, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Y, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> id_Joueur, <span class="keywordtype">bool</span> premierePosition )
<a name="l00114"></a>00114 {
<a name="l00115"></a>00115     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> || X &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || Y &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00116"></a>00116         stdErrorE(<span class="stringliteral">&quot;Impossible d&#39;accèder au block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u, id_Joueur=%d, premierePosition=%d&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y, (<span class="keywordtype">int</span>)id_Joueur, (<span class="keywordtype">int</span>)premierePosition);
<a name="l00117"></a>00117 
<a name="l00118"></a>00118     <a class="code" href="structmap_1_1s___case.html">s_Case</a>* c = c_block + (X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y);
<a name="l00119"></a>00119 
<a name="l00120"></a>00120     <span class="keywordflow">if</span>( !c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> )
<a name="l00121"></a>00121         c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> = <span class="keyword">new</span> std::vector&lt;unsigned char&gt;;
<a name="l00122"></a>00122 
<a name="l00123"></a>00123     <span class="keywordflow">if</span>( premierePosition )
<a name="l00124"></a>00124         c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a>-&gt;insert( c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a>-&gt;begin(), id_Joueur );
<a name="l00125"></a>00125     <span class="keywordflow">else</span>
<a name="l00126"></a>00126         c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a>-&gt;push_back( id_Joueur );
<a name="l00127"></a>00127 
<a name="l00128"></a>00128     <span class="keywordflow">if</span>( <a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.size() &amp;&amp; (<a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.back().x != X || <a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.back().y != Y) )
<a name="l00129"></a>00129         <span class="comment">// Si les changement effectués ne sont pas déjà mit dans la liste =&gt; on ajoute ces coordonnées</span>
<a name="l00130"></a>00130         <a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.push_back( <a class="code" href="coordonnees_8h.html#a6672966a8002c5f5e0a711f7029b0e7d" title="Permet de créer facillement une stucture s_Coordonnees initialisée.">coordonneeConvert</a>(X,Y) );
<a name="l00131"></a>00131 }
<a name="l00132"></a>00132 
<a name="l00133"></a>00133 
<a name="l00134"></a>00134 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00135"></a>00135 <span class="comment">* @fn void map::rmInfoJoueur( unsigned int X, unsigned int Y, unsigned char id_Joueur, bool premierEltInclu )</span>
<a name="l00136"></a>00136 <span class="comment">* @brief Supprime les info du joueur du block (X, Y)</span>
<a name="l00137"></a>00137 <span class="comment">* @param[in] X Coordonnée</span>
<a name="l00138"></a>00138 <span class="comment">* @param[in] Y Coordonnée</span>
<a name="l00139"></a>00139 <span class="comment">* @param[in] id_Joueur L&#39;id du joueur a ajouter au block (meta-info)</span>
<a name="l00140"></a>00140 <span class="comment">* @param[in] premierEltInclu Si le premier element dela liste est l&#39;id du joueur =&gt; SUPPRIMER ?</span>
<a name="l00141"></a>00141 <span class="comment">*</span>
<a name="l00142"></a>00142 <span class="comment">* NOTE: Pour certain map::t_type comme @e bombe_poser, le 1er element représente l&#39;id du joueur qui a posé l&#39;objet</span>
<a name="l00143"></a>00143 <span class="comment">*/</span>
<a name="l00144"></a><a class="code" href="classmap.html#a69992d77d390166473f758436777a415">00144</a> <span class="keywordtype">void</span> <a class="code" href="classmap.html#a69992d77d390166473f758436777a415" title="Supprime les info du joueur du block (X, Y).">map::rmInfoJoueur</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> X, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Y, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> id_Joueur, <span class="keywordtype">bool</span> premierEltInclu )
<a name="l00145"></a>00145 {
<a name="l00146"></a>00146     std::vector&lt;unsigned char&gt;* vct = NULL;
<a name="l00147"></a>00147 
<a name="l00148"></a>00148     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> || X &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || Y &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00149"></a>00149         stdErrorE(<span class="stringliteral">&quot;Impossible d&#39;accèder au block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u, id_Joueur=%u, premierEltInclu=%d&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)id_Joueur, (<span class="keywordtype">int</span>)premierEltInclu);
<a name="l00150"></a>00150 
<a name="l00151"></a>00151     <span class="keywordflow">if</span>( id_Joueur == 0 )
<a name="l00152"></a>00152         stdErrorE(<span class="stringliteral">&quot;ID de joueur incorrect ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u, id_Joueur=%u, premierEltInclu=%d&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)c_block, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)id_Joueur, (<span class="keywordtype">int</span>)premierEltInclu);
<a name="l00153"></a>00153 
<a name="l00154"></a>00154     <span class="keywordflow">if</span>( !(vct = c_block[X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y].joueur) )
<a name="l00155"></a>00155         stdErrorE(<span class="stringliteral">&quot;Pas de meta donnée pour le block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u, id_Joueur=%u, premierEltInclu=%d&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)c_block, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)id_Joueur, (<span class="keywordtype">int</span>)premierEltInclu);
<a name="l00156"></a>00156 
<a name="l00157"></a>00157     <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=!premierEltInclu; i&lt;vct-&gt;size(); i++ )
<a name="l00158"></a>00158     {
<a name="l00159"></a>00159         <span class="keywordflow">if</span>(vct-&gt;at(i) == id_Joueur)
<a name="l00160"></a>00160             vct-&gt;erase(vct-&gt;begin()+i);
<a name="l00161"></a>00161     }
<a name="l00162"></a>00162 }
<a name="l00163"></a>00163 
<a name="l00164"></a>00164 
<a name="l00165"></a>00165 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00166"></a>00166 <span class="comment">* @fn void map::rmInfoJoueur( unsigned int X, unsigned int Y )</span>
<a name="l00167"></a>00167 <span class="comment">* @brief Supprime toutes les meta-info du block (X, Y)</span>
<a name="l00168"></a>00168 <span class="comment">*</span>
<a name="l00169"></a>00169 <span class="comment">* NOTE: Pour certain map::t_type comme @e bombe_poser, le 1er element représente l&#39;id du joueur qui a posé l&#39;objet</span>
<a name="l00170"></a>00170 <span class="comment">*/</span>
<a name="l00171"></a><a class="code" href="classmap.html#aaca5b27af4f0a9d46791e9ac88470be3">00171</a> <span class="keywordtype">void</span> <a class="code" href="classmap.html#a69992d77d390166473f758436777a415" title="Supprime les info du joueur du block (X, Y).">map::rmInfoJoueur</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> X, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Y )
<a name="l00172"></a>00172 {
<a name="l00173"></a>00173     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> || X &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || Y &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00174"></a>00174         stdErrorE(<span class="stringliteral">&quot;Impossible d&#39;accèder au block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y);
<a name="l00175"></a>00175 
<a name="l00176"></a>00176     <span class="keywordflow">if</span>( c_block[X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y].joueur )
<a name="l00177"></a>00177         c_block[X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y].joueur-&gt;clear();
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179 
<a name="l00180"></a>00180 
<a name="l00181"></a>00181 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00182"></a>00182 <span class="comment">* @fn void map::setTaille( unsigned int tailleX, unsigned int tailleY )</span>
<a name="l00183"></a>00183 <span class="comment">* @brief Modifie la taille de la map.</span>
<a name="l00184"></a>00184 <span class="comment">*</span>
<a name="l00185"></a>00185 <span class="comment">* Si une map existe déjà =&gt; delete de l&#39;ancienne et delete des points de départ</span>
<a name="l00186"></a>00186 <span class="comment">*/</span>
<a name="l00187"></a><a class="code" href="classmap.html#a22d57ae0d2336e713c807d92af64ae11">00187</a> <span class="keywordtype">void</span> <a class="code" href="classmap.html#a22d57ae0d2336e713c807d92af64ae11" title="Modifie la taille de la map.">map::setTaille</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tailleX, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tailleY )
<a name="l00188"></a>00188 {
<a name="l00189"></a>00189     <span class="keywordflow">if</span>( tailleX != tailleY )
<a name="l00190"></a>00190         stdErrorE(<span class="stringliteral">&quot;Erreur ! La map doit être carrée ! %u != %u&quot;</span>, tailleX, tailleY);
<a name="l00191"></a>00191 
<a name="l00192"></a>00192     <span class="comment">// Suppression de la map si elle existe</span>
<a name="l00193"></a>00193     <span class="keywordflow">if</span>( <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> ){
<a name="l00194"></a>00194         <span class="comment">// Suppression des meta données</span>
<a name="l00195"></a>00195         <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>*<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>; i++ )
<a name="l00196"></a>00196             <span class="keyword">delete</span> <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[i].joueur;
<a name="l00197"></a>00197         <span class="keyword">delete</span>[] <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>;
<a name="l00198"></a>00198     }
<a name="l00199"></a>00199 
<a name="l00200"></a>00200     <span class="comment">// Suppression des points de départ s&#39;ils existent</span>
<a name="l00201"></a>00201     <span class="keywordflow">if</span>( <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> )
<a name="l00202"></a>00202         <span class="keyword">delete</span>[] <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>;
<a name="l00203"></a>00203 
<a name="l00204"></a>00204     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> = tailleX;
<a name="l00205"></a>00205     <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> = tailleY;
<a name="l00206"></a>00206     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> = <span class="keyword">new</span> <a class="code" href="structmap_1_1s___case.html">s_Case</a>[ tailleX * tailleY ];
<a name="l00207"></a>00207 
<a name="l00208"></a>00208     <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;tailleX*tailleY; i++ )
<a name="l00209"></a>00209     {
<a name="l00210"></a>00210         <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[i].<a class="code" href="structmap_1_1s___case.html#a86e865c530706b05742fa388c860652c" title="type d&amp;#39;element.">element</a> = map::vide;
<a name="l00211"></a>00211         <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[i].<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> = 0;
<a name="l00212"></a>00212     }
<a name="l00213"></a>00213 
<a name="l00214"></a>00214     <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> = 0;
<a name="l00215"></a>00215     <a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a> = 0;
<a name="l00216"></a>00216 }
<a name="l00217"></a>00217 
<a name="l00218"></a>00218 
<a name="l00219"></a>00219 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00220"></a>00220 <span class="comment">* @fn int map::chargerMap( const char fichier[] )</span>
<a name="l00221"></a>00221 <span class="comment">* @brief Charge une map en mémoire</span>
<a name="l00222"></a>00222 <span class="comment">* @param[in] fichier    Si = 0 =&gt; map aléatoire</span>
<a name="l00223"></a>00223 <span class="comment">* @return Renvoie le nombre de joueur maximum pour cette carte</span>
<a name="l00224"></a>00224 <span class="comment">*</span>
<a name="l00225"></a>00225 <span class="comment">* Si la map existe déjà =&gt; ancienne map out&lt;br /&gt;</span>
<a name="l00226"></a>00226 <span class="comment">* Un fichier de map a une forme :&lt;br /&gt;</span>
<a name="l00227"></a>00227 <span class="comment">* X Y NB_Joueur\n&lt;br /&gt;</span>
<a name="l00228"></a>00228 <span class="comment">* #...#\n&lt;br /&gt;</span>
<a name="l00229"></a>00229 <span class="comment">*/</span>
<a name="l00230"></a><a class="code" href="classmap.html#a5aec3f3890ccd081364731383bbb77c3">00230</a> <span class="keywordtype">int</span> <a class="code" href="classmap.html#a5aec3f3890ccd081364731383bbb77c3" title="Charge une map en mémoire.">map::chargerMap</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> fichier[] )
<a name="l00231"></a>00231 {
<a name="l00232"></a>00232     <span class="keywordtype">char</span> *fichierUtiliser = (<span class="keywordtype">char</span>*)fichier;
<a name="l00233"></a>00233     FILE* fp=0;
<a name="l00234"></a>00234     <span class="keywordtype">char</span> c=0;
<a name="l00235"></a>00235     std::vector&lt;string&gt; fichiers;
<a name="l00236"></a>00236 
<a name="l00237"></a>00237     <span class="comment">// Si pas de nom de fichier donnée =&gt; map aléatoire</span>
<a name="l00238"></a>00238     <span class="keywordflow">if</span>( !fichier ){
<a name="l00239"></a>00239         <a class="code" href="classmap.html#a2580f0c7145597fb4dc54632a4f90e0b" title="Lit le dossier ./map et retourne ( par files ) les fichiers (.map) qu&amp;#39;il contient.">readDir</a>( &amp;fichiers );
<a name="l00240"></a>00240 
<a name="l00241"></a>00241         <span class="comment">// Ajout du préfix ./map</span>
<a name="l00242"></a>00242         <span class="keywordtype">int</span> r = <a class="code" href="outils_8cpp.html#a5ee0533ff07a519f3fce335a2f57f157" title="Créer un nombre aléatoire compris entre a et b.">myRand</a>(0, fichiers.size()-1);
<a name="l00243"></a>00243         fichiers.at(r).insert(0, <span class="stringliteral">&quot;./map/&quot;</span>);
<a name="l00244"></a>00244         <span class="comment">//fichiers.at(r) = &quot;lvl1.map&quot;;// A VIRER EN FINAL ( MODE DEBUG )</span>
<a name="l00245"></a>00245         fichierUtiliser = (<span class="keywordtype">char</span> *)fichiers[r].c_str();
<a name="l00246"></a>00246     }
<a name="l00247"></a>00247 
<a name="l00248"></a>00248     <span class="keywordflow">if</span>( !(fp=fopen(fichierUtiliser, <span class="stringliteral">&quot;r&quot;</span>)) )
<a name="l00249"></a>00249         stdErrorE(<span class="stringliteral">&quot;Erreur lors de l&#39;ouverture de la map &lt;%s&gt;&quot;</span>, fichierUtiliser);
<a name="l00250"></a>00250 
<a name="l00251"></a>00251     <span class="keywordflow">if</span>( fscanf(fp, <span class="stringliteral">&quot;%2u %2u %2u\n&quot;</span>, &amp;<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, &amp;<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)&amp;<a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a>) != 3 ){
<a name="l00252"></a>00252         fclose(fp);
<a name="l00253"></a>00253         stdErrorE(<span class="stringliteral">&quot;Erreur lors de la lecture du fichier &lt;%s&gt;&quot;</span>, fichierUtiliser);
<a name="l00254"></a>00254     }
<a name="l00255"></a>00255 
<a name="l00256"></a>00256     <span class="comment">// Bonne dimension ?</span>
<a name="l00257"></a>00257     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || !<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> || <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> != <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00258"></a>00258         stdErrorE(<span class="stringliteral">&quot;Les dimensions de la map sont incorrect ! c_taille=(%u,%u) La map doit être carrée !&quot;</span>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>);
<a name="l00259"></a>00259 
<a name="l00260"></a>00260     <span class="comment">// Nombre de joueur correct</span>
<a name="l00261"></a>00261     <span class="keywordflow">if</span>( !c_nb_PointDeDepartJoueur )
<a name="l00262"></a>00262         stdErrorE(<span class="stringliteral">&quot;Le nombre de joueur pour la map ( ou nombre de point de départ ) est incorrect ! c_nb_PointDeDepartJoueur=%u&quot;</span>, c_nb_PointDeDepartJoueur);
<a name="l00263"></a>00263 
<a name="l00264"></a>00264     <span class="comment">// Allocation de la map</span>
<a name="l00265"></a>00265     <span class="keywordflow">if</span>( !(<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> = <span class="keyword">new</span> <a class="code" href="structmap_1_1s___case.html">s_Case</a>[ <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> ]) )
<a name="l00266"></a>00266         stdErrorE(<span class="stringliteral">&quot;Erreur lors de l&#39;allocation de la mémoire ! c_taille=(%u,%u)&quot;</span>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>);
<a name="l00267"></a>00267 
<a name="l00268"></a>00268     <span class="comment">// Allocation des points de départ</span>
<a name="l00269"></a>00269     <span class="keywordflow">if</span>( !(<a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> = <span class="keyword">new</span> <a class="code" href="structs___coordonnees.html" title="struct de coordonnées ( x,y )">s_Coordonnees</a>[ c_nb_PointDeDepartJoueur ]) )
<a name="l00270"></a>00270         stdErrorE(<span class="stringliteral">&quot;Erreur lors de l&#39;allocation de la mémoire ! c_taille=(%u,%u)&quot;</span>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>);
<a name="l00271"></a>00271 
<a name="l00272"></a>00272 
<a name="l00273"></a>00273     <span class="keywordflow">for</span>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y=0,x; y&lt;<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>; y++ )
<a name="l00274"></a>00274     {
<a name="l00275"></a>00275         <span class="keywordflow">for</span>( x=0; x&lt;<a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>; x++ )
<a name="l00276"></a>00276         {
<a name="l00277"></a>00277             <span class="keywordflow">switch</span>( c=fgetc(fp) )
<a name="l00278"></a>00278             {
<a name="l00279"></a>00279                 <span class="keywordflow">case</span> EOF:{
<a name="l00280"></a>00280                     stdErrorE(<span class="stringliteral">&quot;Fin de fichier prématuré ! x=%u, y=%u, c_taille=(%u,%u), &lt;%s&gt;&quot;</span>, x, y, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, fichierUtiliser);
<a name="l00281"></a>00281                     <span class="keywordflow">break</span>;
<a name="l00282"></a>00282                 }
<a name="l00283"></a>00283                 <span class="keywordflow">case</span> <span class="charliteral">&#39;1&#39;</span>:
<a name="l00284"></a>00284                 <span class="keywordflow">case</span> <span class="charliteral">&#39;2&#39;</span>:
<a name="l00285"></a>00285                 <span class="keywordflow">case</span> <span class="charliteral">&#39;3&#39;</span>:
<a name="l00286"></a>00286                 <span class="keywordflow">case</span> <span class="charliteral">&#39;4&#39;</span>:{
<a name="l00287"></a>00287                     c=c-<span class="charliteral">&#39;0&#39;</span>;<span class="comment">// Convertion en nombre manipulable</span>
<a name="l00288"></a>00288 
<a name="l00289"></a>00289                     <span class="comment">// On vérif que l&#39;on a pas un joueur qui soit en dehors de ce que l&#39;on a réservé</span>
<a name="l00290"></a>00290                     <span class="keywordflow">if</span>( c &gt; c_nb_PointDeDepartJoueur )
<a name="l00291"></a>00291                         stdErrorE(<span class="stringliteral">&quot;Joueur inconnu dans la map &lt;%s&gt; ! x=%u, y=%u, joueur=%d&quot;</span>, fichierUtiliser, x, y, (<span class="keywordtype">int</span>)c);
<a name="l00292"></a>00292 
<a name="l00293"></a>00293                     <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[c-1].<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> = x;
<a name="l00294"></a>00294                     <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[c-1].<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> = y;
<a name="l00295"></a>00295                     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[x * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + y].<a class="code" href="structmap_1_1s___case.html#a86e865c530706b05742fa388c860652c" title="type d&amp;#39;element.">element</a> = vide;
<a name="l00296"></a>00296                     <span class="keywordflow">break</span>;
<a name="l00297"></a>00297                 }
<a name="l00298"></a>00298                 <span class="keywordflow">case</span> <span class="charliteral">&#39; &#39;</span>:{
<a name="l00299"></a>00299                     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[x * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + y].<a class="code" href="structmap_1_1s___case.html#a86e865c530706b05742fa388c860652c" title="type d&amp;#39;element.">element</a> = vide;
<a name="l00300"></a>00300                     <span class="keywordflow">break</span>;
<a name="l00301"></a>00301                 }
<a name="l00302"></a>00302                 <span class="keywordflow">case</span> <span class="charliteral">&#39;#&#39;</span>:{
<a name="l00303"></a>00303                     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[x * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + y].<a class="code" href="structmap_1_1s___case.html#a86e865c530706b05742fa388c860652c" title="type d&amp;#39;element.">element</a> = Mur_INdestructible;
<a name="l00304"></a>00304                     <span class="keywordflow">break</span>;
<a name="l00305"></a>00305                 }
<a name="l00306"></a>00306                 <span class="keywordflow">case</span> <span class="charliteral">&#39;%&#39;</span>:{
<a name="l00307"></a>00307                     <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[x * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + y].<a class="code" href="structmap_1_1s___case.html#a86e865c530706b05742fa388c860652c" title="type d&amp;#39;element.">element</a> = Mur_destructible;
<a name="l00308"></a>00308                     <span class="keywordflow">break</span>;
<a name="l00309"></a>00309                 }
<a name="l00310"></a>00310                 <span class="keywordflow">default</span>:{
<a name="l00311"></a>00311                     stdErrorE(<span class="stringliteral">&quot;Caractère inatendu dans le fichier &lt;%s&gt; : (code)%d, (aff)%c, x=%u, y=%u&quot;</span>, fichierUtiliser, (<span class="keywordtype">int</span>)c, c, x, y);
<a name="l00312"></a>00312                     <span class="keywordflow">break</span>;
<a name="l00313"></a>00313                 }
<a name="l00314"></a>00314             }
<a name="l00315"></a>00315             <a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>[x * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + y].<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> = 0;
<a name="l00316"></a>00316         }
<a name="l00317"></a>00317         fgetc(fp);<span class="comment">// Pour virer le \n de la fin</span>
<a name="l00318"></a>00318     }
<a name="l00319"></a>00319 
<a name="l00320"></a>00320     fclose(fp);
<a name="l00321"></a>00321 
<a name="l00322"></a>00322     <span class="keywordflow">return</span> c_nb_PointDeDepartJoueur;
<a name="l00323"></a>00323 }
<a name="l00324"></a>00324 
<a name="l00325"></a>00325 
<a name="l00326"></a>00326 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00327"></a>00327 <span class="comment">* @fn void map::readDir( std::vector&lt;std::string&gt;* files )</span>
<a name="l00328"></a>00328 <span class="comment">* @brief Lit le dossier ./map et retourne ( par files ) les fichiers (.map) qu&#39;il contient</span>
<a name="l00329"></a>00329 <span class="comment">* @param[in,out] files Dans cette variable sera stocké les nom des fichiers présent dans le dossier ./map</span>
<a name="l00330"></a>00330 <span class="comment">* @attention Aucun fichier n&#39;est préfixé du dossier !</span>
<a name="l00331"></a>00331 <span class="comment">*/</span>
<a name="l00332"></a><a class="code" href="classmap.html#a2580f0c7145597fb4dc54632a4f90e0b">00332</a> <span class="keywordtype">void</span> <a class="code" href="classmap.html#a2580f0c7145597fb4dc54632a4f90e0b" title="Lit le dossier ./map et retourne ( par files ) les fichiers (.map) qu&amp;#39;il contient.">map::readDir</a>( std::vector&lt;std::string&gt;* files )
<a name="l00333"></a>00333 {
<a name="l00334"></a>00334     DIR* dp;
<a name="l00335"></a>00335     dirent* dirp=0;
<a name="l00336"></a>00336 
<a name="l00337"></a>00337     <span class="keywordflow">if</span>( (dp = opendir(<span class="stringliteral">&quot;./map&quot;</span>)) == NULL )
<a name="l00338"></a>00338         stdErrorE(<span class="stringliteral">&quot;Erreur lors de l&#39;ourverture du dossier ./map&quot;</span>);
<a name="l00339"></a>00339 
<a name="l00340"></a>00340     <span class="keywordtype">string</span> tmp;
<a name="l00341"></a>00341     <span class="keywordflow">while</span>( (dirp = readdir(dp)) != NULL )
<a name="l00342"></a>00342     {
<a name="l00343"></a>00343         tmp = dirp-&gt;d_name;
<a name="l00344"></a>00344         <span class="keywordflow">if</span>( tmp[tmp.size()-4] == <span class="charliteral">&#39;.&#39;</span> &amp;&amp;
<a name="l00345"></a>00345             tmp[tmp.size()-3] == <span class="charliteral">&#39;m&#39;</span> &amp;&amp;
<a name="l00346"></a>00346             tmp[tmp.size()-2] == <span class="charliteral">&#39;a&#39;</span> &amp;&amp;
<a name="l00347"></a>00347             tmp[tmp.size()-1] == <span class="charliteral">&#39;p&#39;</span>
<a name="l00348"></a>00348         )
<a name="l00349"></a>00349             files-&gt;push_back(tmp);
<a name="l00350"></a>00350     }
<a name="l00351"></a>00351     closedir(dp);
<a name="l00352"></a>00352 }
<a name="l00353"></a>00353 
<a name="l00354"></a>00354 
<a name="l00355"></a>00355 
<a name="l00356"></a>00356 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00357"></a>00357 <span class="comment">* @fn s_Coordonnees map::mettreJoueurA_sa_PositionInitial( unsigned char joueur )</span>
<a name="l00358"></a>00358 <span class="comment">* @brief Met le perso {joueur} a sa place initial</span>
<a name="l00359"></a>00359 <span class="comment">* @param[in] joueur Joueur que l&#39;on veut déplacer à sa position initial ( un nombre entre 1 et 255 )</span>
<a name="l00360"></a>00360 <span class="comment">* @return Renvoie la position initial du joueur.</span>
<a name="l00361"></a>00361 <span class="comment">*</span>
<a name="l00362"></a>00362 <span class="comment">* &lt;b&gt;Vous devez vous même supprimer le perso de son ancienne position, si il y en avait une&lt;/b&gt;&lt;br /&gt;</span>
<a name="l00363"></a>00363 <span class="comment">* Si le joueur n&#39;est pas trouvé =&gt; Erreur FATAL !</span>
<a name="l00364"></a>00364 <span class="comment">* @warning Le positionnement ne tiens pas compte des obstacles, comme le feu, une bombe, ...</span>
<a name="l00365"></a>00365 <span class="comment">*/</span>
<a name="l00366"></a><a class="code" href="classmap.html#a5de5675c9ac5f63b57bf05b355942caa">00366</a> <a class="code" href="structs___coordonnees.html" title="struct de coordonnées ( x,y )">s_Coordonnees</a> <a class="code" href="classmap.html#a5de5675c9ac5f63b57bf05b355942caa" title="Met le perso {joueur} a sa place initial.">map::mettreJoueurA_sa_PositionInitial</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> joueur )
<a name="l00367"></a>00367 {
<a name="l00368"></a>00368     <span class="keywordflow">if</span>( joueur == 0 || joueur &gt; <a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a> )
<a name="l00369"></a>00369         stdErrorE(<span class="stringliteral">&quot;Le numéro de joueur Doit être entre 1 et %d ! mettreJoueurA_sa_PositionInitial( %d )&quot;</span>, (<span class="keywordtype">int</span>)<a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a>, (<span class="keywordtype">int</span>)joueur);
<a name="l00370"></a>00370 
<a name="l00371"></a>00371     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> || <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1].x &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1].<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00372"></a>00372         stdErrorE(<span class="stringliteral">&quot;Impossible d&#39;accèder au block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u, Joueur=%u&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1].<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1].<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)joueur);
<a name="l00373"></a>00373 
<a name="l00374"></a>00374     <a class="code" href="structmap_1_1s___case.html">s_Case</a>* c = &amp;c_block[ <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1].<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1].<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> ];
<a name="l00375"></a>00375     c-&gt;<a class="code" href="structmap_1_1s___case.html#a86e865c530706b05742fa388c860652c" title="type d&amp;#39;element.">element</a> = UN_joueur;
<a name="l00376"></a>00376     <span class="keywordflow">if</span>( !c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> )
<a name="l00377"></a>00377         c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> = <span class="keyword">new</span> std::vector&lt;unsigned char&gt;;
<a name="l00378"></a>00378     c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a>-&gt;push_back( joueur );
<a name="l00379"></a>00379 
<a name="l00380"></a>00380     <span class="keywordflow">return</span> <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1];
<a name="l00381"></a>00381 }
<a name="l00382"></a>00382 
<a name="l00383"></a>00383 
<a name="l00384"></a>00384 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00385"></a>00385 <span class="comment">* @fn const map::s_Case* map::getBlock( unsigned int X, unsigned int Y ) const</span>
<a name="l00386"></a>00386 <span class="comment">* @brief Retourn le block qui est à la position X, Y</span>
<a name="l00387"></a>00387 <span class="comment">*/</span>
<a name="l00388"></a><a class="code" href="classmap.html#a5ab949cacaad5148299aa70f55bb0c93">00388</a> <span class="keyword">const</span> <a class="code" href="structmap_1_1s___case.html">map::s_Case</a>* <a class="code" href="classmap.html#a5ab949cacaad5148299aa70f55bb0c93" title="Retourn le block qui est à la position X, Y.">map::getBlock</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> X, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Y )<span class="keyword"> const</span>
<a name="l00389"></a>00389 <span class="keyword"></span>{
<a name="l00390"></a>00390     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> || X &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || Y &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00391"></a>00391         stdErrorE(<span class="stringliteral">&quot;Impossible d&#39;accèder au block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y);
<a name="l00392"></a>00392 
<a name="l00393"></a>00393     <span class="keywordflow">return</span> c_block+(X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y);
<a name="l00394"></a>00394 }
<a name="l00395"></a>00395 
<a name="l00396"></a>00396 
<a name="l00397"></a>00397 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00398"></a>00398 <span class="comment">* @fn s_Coordonnees map::positionInitialJoueur( unsigned char joueur ) const</span>
<a name="l00399"></a>00399 <span class="comment">* @brief Renvoie la position initial du joueur.</span>
<a name="l00400"></a>00400 <span class="comment">* @param[in] joueur Joueur dont on veut avoir sa position initial ( un nombre entre 1 et 255 )</span>
<a name="l00401"></a>00401 <span class="comment">*</span>
<a name="l00402"></a>00402 <span class="comment">* Si une position initial n&#39;est pas trouvé pour le joueur =&gt; Erreur FATAL !</span>
<a name="l00403"></a>00403 <span class="comment">*/</span>
<a name="l00404"></a><a class="code" href="classmap.html#a69a17c9066d0cc1b9cf2f0123db3114e">00404</a> <a class="code" href="structs___coordonnees.html" title="struct de coordonnées ( x,y )">s_Coordonnees</a> <a class="code" href="classmap.html#a69a17c9066d0cc1b9cf2f0123db3114e" title="Renvoie la position initial du joueur.">map::positionInitialJoueur</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> joueur )<span class="keyword"> const</span>
<a name="l00405"></a>00405 <span class="keyword"></span>{
<a name="l00406"></a>00406     <span class="keywordflow">if</span>( joueur == 0 )
<a name="l00407"></a>00407         stdErrorE(<span class="stringliteral">&quot;positionInitialJoueur( 0 ) INTERDIT !&quot;</span>);
<a name="l00408"></a>00408 
<a name="l00409"></a>00409     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a> )
<a name="l00410"></a>00410         stdErrorE(<span class="stringliteral">&quot;Charger une map correct avant d&#39;appeler positionInitialJoueur() ! Il n&#39;existe aucun point de départ !&quot;</span>);
<a name="l00411"></a>00411 
<a name="l00412"></a>00412     <span class="keywordflow">if</span>( joueur &gt; <a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a> )
<a name="l00413"></a>00413         stdErrorE(<span class="stringliteral">&quot;Le joueur demandé ne peut être positionné sur cette map ! c_nb_PointDeDepartJoueur=%u, joueur=%u&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#a7b627dce39ed81ebf1bcb398ee4075e3" title="Le nombre de points de départ =&amp;gt; le nombre maximum de joueur sur une map.">c_nb_PointDeDepartJoueur</a>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)joueur);
<a name="l00414"></a>00414 
<a name="l00415"></a>00415     <span class="keywordflow">return</span> <a class="code" href="classmap.html#a0e259cde2ef3b66ab1c06c1c10def1cc" title="Liste des points de départ des joueurs ({point_de_depart_jXXX} numJ).">c_PointDeDepartJoueur</a>[joueur-1];
<a name="l00416"></a>00416 }
<a name="l00417"></a>00417 
<a name="l00418"></a>00418 
<a name="l00419"></a>00419 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00420"></a>00420 <span class="comment">* @fn unsigned int map::nb_InfoJoueur( unsigned int X, unsigned int Y ) const</span>
<a name="l00421"></a>00421 <span class="comment">* @brief Renvoie le nombre d&#39;info joueurs dans le block (X, Y) (meta données)</span>
<a name="l00422"></a>00422 <span class="comment">*/</span>
<a name="l00423"></a><a class="code" href="classmap.html#ab7ddadf37a30d0f56b8fe9fb5331e67f">00423</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classmap.html#ab7ddadf37a30d0f56b8fe9fb5331e67f" title="Renvoie le nombre d&amp;#39;info joueurs dans le block (X, Y) (meta données).">map::nb_InfoJoueur</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> X, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Y )<span class="keyword"> const</span>
<a name="l00424"></a>00424 <span class="keyword"></span>{
<a name="l00425"></a>00425     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a> || X &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> || Y &gt;= <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a> )
<a name="l00426"></a>00426         stdErrorE(<span class="stringliteral">&quot;Impossible d&#39;accèder au block demandé ! c_block=%X, c_taille=(%u,%u), X=%u, Y=%u&quot;</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)<a class="code" href="classmap.html#aa8dc3f13b258509bd3ef0572f2d8d26d" title="Tableau de case =&amp;gt; la map en entère.">c_block</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a>, <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#aaf8eb7cb396be8207c9c3c63a806de51">y</a>, X, Y);
<a name="l00427"></a>00427 
<a name="l00428"></a>00428     <a class="code" href="structmap_1_1s___case.html">s_Case</a>* c = c_block+(X * <a class="code" href="classmap.html#a12febb145e855330c3bfb0dbc3645259" title="Taille de la map.">c_taille</a>.<a class="code" href="structs___coordonnees.html#a58e4c6bec574940d228bf0a1b8b6b308">x</a> + Y);
<a name="l00429"></a>00429 
<a name="l00430"></a>00430     <span class="keywordflow">if</span>( !c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a> )
<a name="l00431"></a>00431         <span class="keywordflow">return</span> 0;
<a name="l00432"></a>00432 
<a name="l00433"></a>00433     <span class="keywordflow">return</span> c-&gt;<a class="code" href="structmap_1_1s___case.html#abb0729961b09f69bd64aa02db1cb83cf" title="La liste est ici pour obtenir des info sur le perso à l&amp;#39;origine du type t.">joueur</a>-&gt;size();
<a name="l00434"></a>00434 }
<a name="l00435"></a>00435 
<a name="l00436"></a>00436 
<a name="l00437"></a>00437 <span class="comment">/***************************************************************************/</span><span class="comment">/*!</span>
<a name="l00438"></a>00438 <span class="comment">* @fn bool map::getModifications( s_Coordonnees&amp; pos )</span>
<a name="l00439"></a>00439 <span class="comment">* @brief Retourne les positions X,Y des case modifiées depuis le dernier cycle</span>
<a name="l00440"></a>00440 <span class="comment">* @param[out] pos La variables où sera stockée les données de retour</span>
<a name="l00441"></a>00441 <span class="comment">* @return True s&#39;il y a eu des modifications</span>
<a name="l00442"></a>00442 <span class="comment">*</span>
<a name="l00443"></a>00443 <span class="comment">* Utilisation:</span>
<a name="l00444"></a>00444 <span class="comment">* @code</span>
<a name="l00445"></a>00445 <span class="comment">* map myMap;</span>
<a name="l00446"></a>00446 <span class="comment">* s_Coordonnees pos={0,0};</span>
<a name="l00447"></a>00447 <span class="comment">* // Charger une map ici + traitement divers</span>
<a name="l00448"></a>00448 <span class="comment">* // ...</span>
<a name="l00449"></a>00449 <span class="comment">* while( myMap.getModifications(pos) )</span>
<a name="l00450"></a>00450 <span class="comment">* {</span>
<a name="l00451"></a>00451 <span class="comment">*   // pos contient les coodonnées d&#39;un block modifié</span>
<a name="l00452"></a>00452 <span class="comment">*   printf(&quot;Le block a l&#39;adresse: X=%u, Y=%u a été modifié.\n&quot;, pos.x, pos.y);</span>
<a name="l00453"></a>00453 <span class="comment">* }</span>
<a name="l00454"></a>00454 <span class="comment">* // Fin des block modifié</span>
<a name="l00455"></a>00455 <span class="comment">* @endcode</span>
<a name="l00456"></a>00456 <span class="comment">* @note A chaque appel de la fonction l&#39;element qui est envoyé a pos est enlevé de la liste des modification (First In Last Out)</span>
<a name="l00457"></a>00457 <span class="comment">*/</span>
<a name="l00458"></a><a class="code" href="classmap.html#a3453f2495334983df3bbf1737908e25e">00458</a> <span class="keywordtype">bool</span> <a class="code" href="classmap.html#a37db5c6e03a1245a8c461d56d7f011ef">map::getModifications</a>( <a class="code" href="structs___coordonnees.html" title="struct de coordonnées ( x,y )">s_Coordonnees</a>&amp; pos )
<a name="l00459"></a>00459 {
<a name="l00460"></a>00460     <span class="keywordflow">if</span>( !<a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.size() )
<a name="l00461"></a>00461         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00462"></a>00462 
<a name="l00463"></a>00463     pos = <a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.back();<span class="comment">// On envoie le dernier element</span>
<a name="l00464"></a>00464     <a class="code" href="classmap.html#a2bb86c76f29e21c88014ebbe05769096" title="Les changement qui ont eu lieu sur la map.">c_listDesChangement</a>.pop_back();<span class="comment">// On le supprime de la liste</span>
<a name="l00465"></a>00465 
<a name="l00466"></a>00466     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00467"></a>00467 }
</pre></div></div>
</div>
<hr class="footer"/><address class="footer"><small>Généré le Fri Jan 21 2011 01:21:27 pour Bomberman par&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>
